home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / mm / mm-0.90 / action.c next >
Encoding:
C/C++ Source or Header  |  1990-12-18  |  2.2 KB  |  108 lines

  1. /*
  2.  * Copyright (c) 1986, 1990 by The Trustees of Columbia University in
  3.  * the City of New York.  Permission is granted to any individual or
  4.  * institution to use, copy, or redistribute this software so long as it
  5.  * is not sold for profit, provided this copyright notice is retained.
  6.  */
  7.  
  8. #ifndef lint
  9. static char *rcsid = "$Header: /f/src2/encore.bin/cucca/mm/tarring-it-up/RCS/action.c,v 2.1 90/10/04 18:23:16 melissa Exp $";
  10. #endif
  11.  
  12. #include "mm.h"
  13. #include "parse.h"
  14. #include "cmfncs.h"
  15.  
  16. int (*(mmact[128]))();
  17. extern int (*(stdact[128]))(), fixact(), begact(), nextact();
  18. int mm_clsact(), fixact(), mm_abortact();
  19. extern jmp_buf abortbuf;
  20. int allow_aborts;
  21.  
  22. /*
  23.  * set up special action characters for MM.
  24.  */
  25.  
  26. typedef int (*(*acttab))();
  27.  
  28. acttab
  29. mmactini()
  30. {
  31.     bcopy(stdact, mmact, sizeof(mmact));
  32.     mmact[(int) '\f'] = mm_clsact;
  33.     mmact[(int) '\016'] = mm_abortact; 
  34.     return (mmact);
  35. }
  36.  
  37. mm_clsact(fdblist,brk,deferred)
  38. fdb *fdblist;
  39. char brk;
  40. int deferred;
  41. {
  42.   extern int control_l_confirm;
  43.  
  44.   if (control_l_confirm) {
  45.       return ((*stdact[brk])(fdblist, brk, deferred));
  46.   }
  47.   cmxcls();                       /* clear the screen for a formfeed */
  48.   return(fixact(fdblist,brk,deferred));    /* refresh the line */
  49. }
  50.  
  51. int
  52. mm_abortact(fdblist,brk,deferred)
  53. fdb *fdblist;
  54. char brk;
  55. int deferred;
  56. {
  57.     pval parseval;
  58.     fdb *used;
  59.     csb holdcsb;
  60.     int cmdbuf[200];
  61.     char atmbuf[200], wrkbuf[200];
  62.     jmp_buf erbuf, rpbuf;
  63.     extern int user_aborted;
  64.  
  65.     if (deferred)
  66.     return(CMxDFR);
  67.  
  68.     if (!allow_aborts) {
  69.     return(nextact(fdblist,brk,deferred));
  70.     }
  71.  
  72.     if (control_n_abort == SET_ALWAYS) {
  73.     user_aborted = true;
  74.     longjmp (abortbuf, 1);
  75.     }
  76.     if (control_n_abort == SET_NEVER) {
  77.     cmsti1 (brk, 0);
  78.     return CMxOK;
  79.     }
  80.     else {                /* set control-n-abort ask */
  81.     extern int user_aborted;
  82.     csb oldcsb;
  83.     save_parse_context();
  84.     oldcsb = cmcsb;
  85.     cmbufs (cmdbuf, sizeof cmdbuf, atmbuf, sizeof atmbuf,
  86.         wrkbuf, sizeof wrkbuf);
  87.     cmact (nil);
  88.     user_aborted = yesno("Abort? ", "yes");
  89.     cmcsb = oldcsb;
  90.     cmcsb._cmcol = 0;
  91.     restore_parse_context();
  92.     if (user_aborted)
  93.         longjmp (abortbuf, 1);
  94.     fixact (fdblist, brk, 0);
  95.     return (CMxOK);
  96.     }
  97. }
  98.  
  99. /*
  100.  * redisplay_line:
  101.  * simulate a ^R
  102.  */
  103. redisplay_line ()
  104. {
  105.     fixact (NULL, NULL, NULL);        /* doesn't use any args */
  106. }
  107.  
  108.